home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / tcl / tcl67.lha / tcl6.7 / compat / strerror.c < prev    next >
C/C++ Source or Header  |  1991-12-16  |  11KB  |  472 lines

  1. /* 
  2.  * strerror.c --
  3.  *
  4.  *    Source code for the "strerror" library routine.
  5.  *
  6.  * Copyright 1988-1991 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appears in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  */
  15.  
  16. #ifndef lint
  17. static char rcsid[] = "$Header: /user6/ouster/tcl/compat/RCS/strerror.c,v 1.2 91/12/16 09:26:48 ouster Exp $ SPRITE (Berkeley)";
  18. #endif /* not lint */
  19.  
  20. #include <tclInt.h>
  21. #include <tclUnix.h>
  22.  
  23. /*
  24.  *----------------------------------------------------------------------
  25.  *
  26.  * strerror --
  27.  *
  28.  *    Map an integer error number into a printable string.
  29.  *
  30.  * Results:
  31.  *    The return value is a pointer to a string describing
  32.  *    error.  The first character of string isn't capitalized.
  33.  *
  34.  * Side effects:
  35.  *    Each call to this procedure may overwrite the value returned
  36.  *    by the previous call.
  37.  *
  38.  *----------------------------------------------------------------------
  39.  */
  40.  
  41. char *
  42. strerror(error)
  43.     int error;            /* Integer identifying error (must be
  44.                  * one of the officially-defined Sprite
  45.                  * errors, as defined in errno.h). */
  46. {
  47.     static char msg[50];
  48.  
  49. #if TCL_SYS_ERRLIST
  50.     if ((error <= sys_nerr) && (error > 0)) {
  51.     return sys_errlist[error];
  52.     }
  53. #else
  54.     switch (error) {
  55. #ifdef E2BIG
  56.     case E2BIG: return "argument list too long";
  57. #endif
  58. #ifdef EACCES
  59.     case EACCES: return "permission denied";
  60. #endif
  61. #ifdef EADDRINUSE
  62.     case EADDRINUSE: return "address already in use";
  63. #endif
  64. #ifdef EADDRNOTAVAIL
  65.     case EADDRNOTAVAIL: return "can't assign requested address";
  66. #endif
  67. #ifdef EADV
  68.     case EADV: return "advertise error";
  69. #endif
  70. #ifdef EAFNOSUPPORT
  71.     case EAFNOSUPPORT: return "address family not supported by protocol family";
  72. #endif
  73. #ifdef EAGAIN
  74.     case EAGAIN: return "no more processes";
  75. #endif
  76. #ifdef EALIGN
  77.     case EALIGN: return "EALIGN";
  78. #endif
  79. #ifdef EALREADY
  80.     case EALREADY: return "operation already in progress";
  81. #endif
  82. #ifdef EBADE
  83.     case EBADE: return "bad exchange descriptor";
  84. #endif
  85. #ifdef EBADF
  86.     case EBADF: return "bad file number";
  87. #endif
  88. #ifdef EBADFD
  89.     case EBADFD: return "file descriptor in bad state";
  90. #endif
  91. #ifdef EBADMSG
  92.     case EBADMSG: return "not a data message";
  93. #endif
  94. #ifdef EBADR
  95.     case EBADR: return "bad request descriptor";
  96. #endif
  97. #ifdef EBADRPC
  98.     case EBADRPC: return "RPC structure is bad";
  99. #endif
  100. #ifdef EBADRQC
  101.     case EBADRQC: return "bad request code";
  102. #endif
  103. #ifdef EBADSLT
  104.     case EBADSLT: return "invalid slot";
  105. #endif
  106. #ifdef EBFONT
  107.     case EBFONT: return "bad font file format";
  108. #endif
  109. #ifdef EBUSY
  110.     case EBUSY: return "mount device busy";
  111. #endif
  112. #ifdef ECHILD
  113.     case ECHILD: return "no children";
  114. #endif
  115. #ifdef ECHRNG
  116.     case ECHRNG: return "channel number out of range";
  117. #endif
  118. #ifdef ECOMM
  119.     case ECOMM: return "communication error on send";
  120. #endif
  121. #ifdef ECONNABORTED
  122.     case ECONNABORTED: return "software caused connection abort";
  123. #endif
  124. #ifdef ECONNREFUSED
  125.     case ECONNREFUSED: return "connection refused";
  126. #endif
  127. #ifdef ECONNRESET
  128.     case ECONNRESET: return "connection reset by peer";
  129. #endif
  130. #if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
  131.     case EDEADLK: return "resource deadlock avoided";
  132. #endif
  133. #ifdef EDEADLOCK
  134.     case EDEADLOCK: return "resource deadlock avoided";
  135. #endif
  136. #ifdef EDESTADDRREQ
  137.     case EDESTADDRREQ: return "destination address required";
  138. #endif
  139. #ifdef EDIRTY
  140.     case EDIRTY: return "mounting a dirty fs w/o force";
  141. #endif
  142. #ifdef EDOM
  143.     case EDOM: return "math argument out of range";
  144. #endif
  145. #ifdef EDOTDOT
  146.     case EDOTDOT: return "cross mount point";
  147. #endif
  148. #ifdef EDQUOT
  149.     case EDQUOT: return "disk quota exceeded";
  150. #endif
  151. #ifdef EDUPPKG
  152.     case EDUPPKG: return "duplicate package name";
  153. #endif
  154. #ifdef EEXIST
  155.     case EEXIST: return "file already exists";
  156. #endif
  157. #ifdef EFAULT
  158.     case EFAULT: return "bad address in system call argument";
  159. #endif
  160. #ifdef EFBIG
  161.     case EFBIG: return "file too large";
  162. #endif
  163. #ifdef EHOSTDOWN
  164.     case EHOSTDOWN: return "host is down";
  165. #endif
  166. #ifdef EHOSTUNREACH
  167.     case EHOSTUNREACH: return "host is unreachable";
  168. #endif
  169. #ifdef EIDRM
  170.     case EIDRM: return "identifier removed";
  171. #endif
  172. #ifdef EINIT
  173.     case EINIT: return "initialization error";
  174. #endif
  175. #ifdef EINPROGRESS
  176.     case EINPROGRESS: return "operation now in progress";
  177. #endif
  178. #ifdef EINTR
  179.     case EINTR: return "interrupted system call";
  180. #endif
  181. #ifdef EINVAL
  182.     case EINVAL: return "invalid argument";
  183. #endif
  184. #ifdef EIO
  185.     case EIO: return "I/O error";
  186. #endif
  187. #ifdef EISCONN
  188.     case EISCONN: return "socket is already connected";
  189. #endif
  190. #ifdef EISDIR
  191.     case EISDIR: return "illegal operation on a directory";
  192. #endif
  193. #ifdef EISNAME
  194.     case EISNAM: return "is a name file";
  195. #endif
  196. #ifdef ELBIN
  197.     case ELBIN: return "ELBIN";
  198. #endif
  199. #ifdef EL2HLT
  200.     case EL2HLT: return "level 2 halted";
  201. #endif
  202. #ifdef EL2NSYNC
  203.     case EL2NSYNC: return "level 2 not synchronized";
  204. #endif
  205. #ifdef EL3HLT
  206.     case EL3HLT: return "level 3 halted";
  207. #endif
  208. #ifdef EL3RST
  209.     case EL3RST: return "level 3 reset";
  210. #endif
  211. #ifdef ELIBACC
  212.     case ELIBACC: return "can not access a needed shared library";
  213. #endif
  214. #ifdef ELIBBAD
  215.     case ELIBBAD: return "accessing a corrupted shared library";
  216. #endif
  217. #ifdef ELIBEXEC
  218.     case ELIBEXEC: return "can not exec a shared library directly";
  219. #endif
  220. #ifdef ELIBMAX
  221.     case ELIBMAX: return
  222.         "attempting to link in more shared libraries than system limit";
  223. #endif
  224. #ifdef ELIBSCN
  225.     case ELIBSCN: return ".lib section in a.out corrupted";
  226. #endif
  227. #ifdef ELNRNG
  228.     case ELNRNG: return "link number out of range";
  229. #endif
  230. #ifdef ELOOP
  231.     case ELOOP: return "too many levels of symbolic links";
  232. #endif
  233. #ifdef EMFILE
  234.     case EMFILE: return "too many open files";
  235. #endif
  236. #ifdef EMLINK
  237.     case EMLINK: return "too many links";
  238. #endif
  239. #ifdef EMSGSIZE
  240.     case EMSGSIZE: return "message too long";
  241. #endif
  242. #ifdef EMULTIHOP
  243.     case EMULTIHOP: return "multihop attempted";
  244. #endif
  245. #ifdef ENAMETOOLONG
  246.     case ENAMETOOLONG: return "file name too long";
  247. #endif
  248. #ifdef ENAVAIL
  249.     case ENAVAIL: return "not available";
  250. #endif
  251. #ifdef ENET
  252.     case ENET: return "ENET";
  253. #endif
  254. #ifdef ENETDOWN
  255.     case ENETDOWN: return "network is down";
  256. #endif
  257. #ifdef ENETRESET
  258.     case ENETRESET: return "network dropped connection on reset";
  259. #endif
  260. #ifdef ENETUNREACH
  261.     case ENETUNREACH: return "network is unreachable";
  262. #endif
  263. #ifdef ENFILE
  264.     case ENFILE: return "file table overflow";
  265. #endif
  266. #ifdef ENOANO
  267.     case ENOANO: return "anode table overflow";
  268. #endif
  269. #if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
  270.     case ENOBUFS: return "no buffer space available";
  271. #endif
  272. #ifdef ENOCSI
  273.     case ENOCSI: return "no CSI structure available";
  274. #endif
  275. #ifdef ENODATA
  276.     case ENODATA: return "no data available";
  277. #endif
  278. #ifdef ENODEV
  279.     case ENODEV: return "no such device";
  280. #endif
  281. #ifdef ENOENT
  282.     case ENOENT: return "no such file or directory";
  283. #endif
  284. #ifdef ENOEXEC
  285.     case ENOEXEC: return "exec format error";
  286. #endif
  287. #ifdef ENOLCK
  288.     case ENOLCK: return "no locks available";
  289. #endif
  290. #ifdef ENOLINK
  291.     case ENOLINK: return "link has be severed";
  292. #endif
  293. #ifdef ENOMEM
  294.     case ENOMEM: return "not enough memory";
  295. #endif
  296. #ifdef ENOMSG
  297.     case ENOMSG: return "no message of desired type";
  298. #endif
  299. #ifdef ENONET
  300.     case ENONET: return "machine is not on the network";
  301. #endif
  302. #ifdef ENOPKG
  303.     case ENOPKG: return "package not installed";
  304. #endif
  305. #ifdef ENOPROTOOPT
  306.     case ENOPROTOOPT: return "bad proocol option";
  307. #endif
  308. #ifdef ENOSPC
  309.     case ENOSPC: return "no space left on device";
  310. #endif
  311. #ifdef ENOSR
  312.     case ENOSR: return "out of stream resources";
  313. #endif
  314. #ifdef ENOSTR
  315.     case ENOSTR: return "not a stream device";
  316. #endif
  317. #ifdef ENOSYM
  318.     case ENOSYM: return "unresolved symbol name";
  319. #endif
  320. #ifdef ENOSYS
  321.     case ENOSYS: return "function not implemented";
  322. #endif
  323. #ifdef ENOTBLK
  324.     case ENOTBLK: return "block device required";
  325. #endif
  326. #ifdef ENOTCONN
  327.     case ENOTCONN: return "socket is not connected";
  328. #endif
  329. #ifdef ENOTDIR
  330.     case ENOTDIR: return "not a directory";
  331. #endif
  332. #ifdef ENOTEMPTY
  333.     case ENOTEMPTY: return "directory not empty";
  334. #endif
  335. #ifdef ENOTNAM
  336.     case ENOTNAM: return "not a name file";
  337. #endif
  338. #ifdef ENOTSOCK
  339.     case ENOTSOCK: return "socket operation on non-socket";
  340. #endif
  341. #ifdef ENOTTY
  342.     case ENOTTY: return "inappropriate device for ioctl";
  343. #endif
  344. #ifdef ENOTUNIQ
  345.     case ENOTUNIQ: return "name not unique on network";
  346. #endif
  347. #ifdef ENXIO
  348.     case ENXIO: return "no such device or address";
  349. #endif
  350. #ifdef EOPNOTSUPP
  351.     case EOPNOTSUPP: return "operation not supported on socket";
  352. #endif
  353. #ifdef EPERM
  354.     case EPERM: return "not owner";
  355. #endif
  356. #ifdef EPFNOSUPPORT
  357.     case EPFNOSUPPORT: return "protocol family not supported";
  358. #endif
  359. #ifdef EPIPE
  360.     case EPIPE: return "broken pipe";
  361. #endif
  362. #ifdef EPROCLIM
  363.     case EPROCLIM: return "too many processes";
  364. #endif
  365. #ifdef EPROCUNAVAIL
  366.     case EPROCUNAVAIL: return "bad procedure for program";
  367. #endif
  368. #ifdef EPROGMISMATCH
  369.     case EPROGMISMATCH: return "program version wrong";
  370. #endif
  371. #ifdef EPROGUNAVAIL
  372.     case EPROGUNAVAIL: return "RPC program not available";
  373. #endif
  374. #ifdef EPROTO
  375.     case EPROTO: return "protocol error";
  376. #endif
  377. #ifdef EPROTONOSUPPORT
  378.     case EPROTONOSUPPORT: return "protocol not suppored";
  379. #endif
  380. #ifdef EPROTOTYPE
  381.     case EPROTOTYPE: return "protocol wrong type for socket";
  382. #endif
  383. #ifdef ERANGE
  384.     case ERANGE: return "math result unrepresentable";
  385. #endif
  386. #if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
  387.     case EREFUSED: return "EREFUSED";
  388. #endif
  389. #ifdef EREMCHG
  390.     case EREMCHG: return "remote address changed";
  391. #endif
  392. #ifdef EREMDEV
  393.     case EREMDEV: return "remote device";
  394. #endif
  395. #ifdef EREMOTE
  396.     case EREMOTE: return "pathname hit remote file system";
  397. #endif
  398. #ifdef EREMOTEIO
  399.     case EREMOTEIO: return "remote i/o error";
  400. #endif
  401. #ifdef EREMOTERELEASE
  402.     case EREMOTERELEASE: return "EREMOTERELEASE";
  403. #endif
  404. #ifdef EROFS
  405.     case EROFS: return "read-only file system";
  406. #endif
  407. #ifdef ERPCMISMATCH
  408.     case ERPCMISMATCH: return "RPC version is wrong";
  409. #endif
  410. #ifdef ERREMOTE
  411.     case ERREMOTE: return "object is remote";
  412. #endif
  413. #ifdef ESHUTDOWN
  414.     case ESHUTDOWN: return "can't send afer socket shutdown";
  415. #endif
  416. #ifdef ESOCKTNOSUPPORT
  417.     case ESOCKTNOSUPPORT: return "socket type not supported";
  418. #endif
  419. #ifdef ESPIPE
  420.     case ESPIPE: return "invalid seek";
  421. #endif
  422. #ifdef ESRCH
  423.     case ESRCH: return "no such process";
  424. #endif
  425. #ifdef ESRMNT
  426.     case ESRMNT: return "srmount error";
  427. #endif
  428. #ifdef ESTALE
  429.     case ESTALE: return "stale remote file handle";
  430. #endif
  431. #ifdef ESUCCESS
  432.     case ESUCCESS: return "Error 0";
  433. #endif
  434. #ifdef ETIME
  435.     case ETIME: return "timer expired";
  436. #endif
  437. #ifdef ETIMEDOUT
  438.     case ETIMEDOUT: return "connection timed out";
  439. #endif
  440. #ifdef ETOOMANYREFS
  441.     case ETOOMANYREFS: return "too many references: can't splice";
  442. #endif
  443. #ifdef ETXTBSY
  444.     case ETXTBSY: return "text file or pseudo-device busy";
  445. #endif
  446. #ifdef EUCLEAN
  447.     case EUCLEAN: return "structure needs cleaning";
  448. #endif
  449. #ifdef EUNATCH
  450.     case EUNATCH: return "protocol driver not attached";
  451. #endif
  452. #ifdef EUSERS
  453.     case EUSERS: return "too many users";
  454. #endif
  455. #ifdef EVERSION
  456.     case EVERSION: return "version mismatch";
  457. #endif
  458. #if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
  459.     case EWOULDBLOCK: return "operation would block";
  460. #endif
  461. #ifdef EXDEV
  462.     case EXDEV: return "cross-domain link";
  463. #endif
  464. #ifdef EXFULL
  465.     case EXFULL: return "message tables full";
  466. #endif
  467.     }
  468. #endif /* ! TCL_SYS_ERRLIST */
  469.     sprintf(msg, "unknown error (%d)", error);
  470.     return msg;
  471. }
  472.